/**
 * Copyright(C) 2012 Luvina
 * TblUserLogic.java, 25-05-2012 NguyenVietDung
 */
package net.luvina.manageuser.logic;

import java.util.ArrayList;
import java.util.List;

import net.luvina.manageuser.dto.UserDetailDto;
import net.luvina.manageuser.hibernate.TblUser;

/**
 * TblUserLogic interface
 *
 * @author NguyenVietDung
 */
public interface TblUserLogic {

	/**
	 *
	 * getListUser: Lấy danh sách user
	 *
	 * @param offset
	 *            Vị trí data cần lấy nào
	 * @param limit
	 *            Số lượng lấy
	 * @param groupId
	 *            Mã nhóm search
	 * @param fullName
	 *            full_name search
	 * @param sortType
	 *            full_name or end_date or code_level
	 * @param sortByFullName
	 *            ASC or DESC
	 * @param sortByCodeLevel
	 *            ASC or DESC
	 * @param sortByEndDate
	 *            ASC or DESC
	 * @return List<UserDetailDto> Danh sách user
	 */
	public List<UserDetailDto> getListUser(int offset, int limit, int groupId, String fullName, String sortType, String sortByFullName,
			String sortByCodeLevel, String sortByEndDate);

	/**
	 * getTotalRecords: Lấy tổng số user
	 *
	 * @param groupId
	 *            : Mã nhóm search
	 * @param fullName
	 *            : full_name search
	 * @return total records: Tổng số user
	 */
	public int getTotalRecords(int groupId, String fullName);

	/**
	 *
	 * createUser: Insert data user vào bảng tbl_user và tbl_detail_user_japan
	 *
	 * @param tblUser
	 *            : Một đối tượng TblUser
	 * @return true nếu insert thành công, false nếu insert không thành công
	 */
	public boolean createUser(TblUser tblUser);

	/**
	 *
	 * getUserById: Lấy thông tin của 1 user theo userId
	 *
	 * @param userId
	 *            : mã của một user
	 * @return: Một đối tượng TblUser
	 */
	public TblUser getUserById(int userId);

	/**
	 *
	 * getDetailUserById: Lấy thông tin chi tiết của 1 user theo userId
	 *
	 * @param userId
	 *            : Mã của một user
	 * @return: Một đối tượng UserDetailDto
	 */
	public UserDetailDto getDetailUserById(int userId);

	/**
	 *
	 * checkExistedEmail: Kiểm tra email đã tồn tại trong bảng tbl_user chưa?
	 *
	 * @param userId
	 *            : Mã của một user
	 * @param email
	 *            : Email của user
	 * @return true khi email đã tồn tại, false khi email chưa tồn tại
	 */
	public boolean checkExistedEmail(int userId, String email);

	/**
	 *
	 * checkExistedLoginName: Kiểm tra loginName đã tồn tại trong bảng tbl_user
	 * chưa?
	 *
	 * @param userId
	 *            : Mã của một user
	 * @param loginName
	 *            : loginName/ tên đăng nhập của một user
	 * @return true khi loginName đã tồn tại, false khi loginName chưa tồn tại
	 */
	public boolean checkExistedLoginName(int userId, String loginName);

}
